package com.hzncc.flowable_diboot.service.invoicemanage;

import com.diboot.core.vo.Pagination;
import com.hzncc.flowable_diboot.delivery.vo.DeliveryRegisterVO;
import com.hzncc.flowable_diboot.delivery.vo.SyncDeliveryRegisterVO;
import com.hzncc.flowable_diboot.dto.invoicemanage.InvoiceFormDTO;
import com.hzncc.flowable_diboot.dto.invoicemanage.InvoiceRegisterDTO;
import com.hzncc.flowable_diboot.entity.invoicemanage.InvoiceRegister;

import com.diboot.core.service.BaseService;
import com.hzncc.flowable_diboot.vo.invoicemanage.InvoiceFormVO;
import com.hzncc.flowable_diboot.vo.invoicemanage.InvoiceRegisterDetailVO;
import com.hzncc.flowable_diboot.vo.invoicemanage.InvoiceRegisterListVO;
import com.hzncc.flowable_diboot.vo.invoicemanage.SyncInvoiceRegisterVO;
import jakarta.servlet.http.HttpServletResponse;

import java.util.List;
import java.util.Map;

/**
* 开票登记 相关Service接口定义
* @author MyName
* @version 1.0
* @date 2024-11-06
* Copyright © MyCorp
*/
public interface InvoiceRegisterService extends BaseService<InvoiceRegister> {

    List<InvoiceFormVO> getInvoiceForms(InvoiceFormDTO invoiceFormDTO);
    
    List<InvoiceFormVO> getInvoiceForms(InvoiceFormDTO invoiceFormDTO, Pagination pagination);

    Map<String,String> getInvoiceCodeList(String registerType);

    /**
     * 打印回执单
     * @param response
     * @param invoiceRegisterIds
     * @return
     */
    String printReceipt(HttpServletResponse response, List<String> invoiceRegisterIds) throws Exception;

    /**
     * sap推送开票登记
     * @param syncInvoiceRegisterVO
     * @return
     */
    Boolean syncInvoiceRegister(SyncInvoiceRegisterVO syncInvoiceRegisterVO);

    /**
     * 分页查询开票登记列表
     * @param invoiceRegisterDTO
     * @param pagination
     * @return
     */
    List<InvoiceRegisterListVO> getPage(InvoiceRegisterDTO invoiceRegisterDTO, Pagination pagination);

    /**
     * 查询开票登记详情
     * @param id
     * @return
     */
    InvoiceRegisterDetailVO getDetail(String id);

    /**
     * 新增开票登记
     * @param invoiceRegisterDetailVO
     * @return
     */
    Boolean saveInvoiceRegister(InvoiceRegisterDetailVO invoiceRegisterDetailVO);

    /**
     * 编辑开票登记
     * @param invoiceRegisterDetailVO
     * @return
     */
    Boolean updateInvoiceRegister(InvoiceRegisterDetailVO invoiceRegisterDetailVO);

    /**
     * 批量修改开票登记
     * @param invoiceRegisterDetailVOS
     * @return
     */
    Boolean updateInvoiceRegisterBatch(List<InvoiceRegisterDetailVO> invoiceRegisterDetailVOS);

    /**
     * 删除开票登记
     * @param id
     * @return
     */
    Boolean deleteDeliveryRegister(String id);

    Boolean deleteDeliveryRegisterBatch(List<String> ids);

}